
#include <stdio.h>
#include <stdlib.h>

/**
 * 打开文件 ： fopen(filename, mode)
 * 参数 ： 文件名（filename）、文件模式（mode）
 * 文件模式 ：
 *      1. r ：只读；
 *      2. w ：只写，如果文件存在，则清空文件内容，如果文件不存在，则创建文件；
 *      3. a ：追加，如果文件存在，则从文件末尾开始写，如果文件不存在，则创建文件；
 *      4. r+ ：读写，如果文件不存在，则打开失败；
 *      5. w+ ：读写，如果文件存在，则清空文件内容，如果文件不存在，则创建文件；
 *      6. a+ ：读写，如果文件存在，则从文件末尾开始写，如果文件不存在，则创建文件；
 *      7. rb ：以二进制方式只读；
 *      8. wb ：以二进制方式只写，如果文件存在，则清空文件内容，如果文件不存在，则创建文件；
 *      9. ab ：以二进制方式追加，如果文件存在，则从文件末尾开始写，如果文件不存在，则创建文件；
 *      10. rb+ ：以二进制方式读写，如果文件不存在，则打开失败；
 *      11. wb+ ：以二进制方式读写，如果文件存在，则清空文件内容，如果文件不存在，则创建文件；
 *      12. ab+ ：以二进制方式读写，如果文件存在，则从文件末尾开始写，如果文件不存在，则创建文件；
 *
 * 写文件 ：
 *      fputc() ： 写一个字符，成功返回写入的字符；失败返回EOF;
 *      fputs() : 写一个字符串，成功返回非负整数；失败返回EOF;
 *      fprintf(): 写一个格式化的字符串，成功返回非负整数；失败返回EOF;
 * 读文件 ：
 *      fgetc() : 读一个字符，成功返回读取的字符；失败返回EOF;
 *      fgets() : 读一个字符串，成功返回读取的字符串；失败返回NULL;
 *      fscanf(): 读一个格式化的字符串，成功返回读取的字符个数；失败返回EOF;
 *
 * 关闭文件 ： fclose(file), 返回值：成功返回0，失败返回EOF
 */
#define BUFFER_SIZE 1024
 void test_read_write() {
    FILE *src_file = fopen("E:\\workspaces\\Lear\\C-study\\chapter01\\test-read.txt", "r");
    FILE *dst_file = fopen("E:\\workspaces\\Lear\\C-study\\chapter01\\test-write.txt", "w");
     if (src_file == NULL ) {
         perror("文件打开失败");
         exit(EXIT_FAILURE);
     }

     char buffer[BUFFER_SIZE];
     // 逐行读取并写入
     while (fgets(buffer, BUFFER_SIZE, src_file) != NULL) {
         if (fputs(buffer, dst_file) == EOF) {
             perror("写入失败");
             break;
         }
     }
     // 关闭文件
     fclose(src_file);
     fclose(dst_file);
 }

int main() {
    test_read_write();
}